#include <iostream>
#include "TestReg.h"
#include "../CapaLogica/HashManager.h"

#define BLOQUE_SIZE 512

void cargarRegistros(HashManager& hash) {
	TestReg user1(11, "Gabo1", "Camillo", 'P');
	TestReg user2(22, "Ferchu2", "Gomez", 'U');
	TestReg user3(33, "Jeronimo3", "Salguero", 'U');
	TestReg user4(44, "Pancho4", "Igni", 'U');

	hash.agregarRegistro(&user1);
	hash.agregarRegistro(&user2);
	hash.agregarRegistro(&user3);
	hash.agregarRegistro(&user4);
}

void buscarRegistroEspecifico(HashManager& hash) {
	unsigned int idABuscar = 22;
	std::cout << "BUSCAR (" << idABuscar << ")" << std::endl;
	TestReg user;

	if(hash.buscarRegistro(idABuscar, &user))
		std::cout << user.getId() << ", " << user.getNombre() << " " << user.getApellido() << std::endl;
	else
		std::cout << "El Registro no se pudo encontrar" << std::endl;
}

void borrarRegistroEspecifico(HashManager& hash) {
	unsigned int idABorrar = 33;
	std::cout << "BORRAR (" << idABorrar << ")" << std::endl;

	if(hash.eliminarRegistro(idABorrar))
		std::cout << "Se borró el Registro con id " << idABorrar << std::endl;
	else
		std::cout << "El Registro no se pudo borrar" << std::endl;
}

void modificarRegistroEspecifico(HashManager& hash) {
	unsigned int idAModificar = 11;
	std::cout << "MODIFICAR (" << idAModificar << ")" << std::endl;
	TestReg modif;

	if(hash.buscarRegistro(idAModificar, &modif)) {
		std::cout << "El registro se recuperó para su modificacion:" << std::endl;
		std::cout << modif.getId() << ", " << modif.getNombre() << " " << modif.getApellido() << std::endl;
	}
	else
		std::cout << "El Registro no se pudo encontrar" << std::endl;

	modif.setNombre("Gabriel");

	if(hash.modificarRegistro(&modif)) {
		std::cout << "El registro se modificó y quedó asi:" << std::endl;
		hash.buscarRegistro(idAModificar, &modif);
		std::cout << modif.getId() << ", " << modif.getNombre() << " " << modif.getApellido() << std::endl;
	}
	else
		std::cout << "El Registro no se pudo modificar" << std::endl;
}

void testHash() {
	HashManager hash("buckets", "tablahash", BLOQUE_SIZE);
	cargarRegistros(hash);
	borrarRegistroEspecifico(hash);
	buscarRegistroEspecifico(hash);
	modificarRegistroEspecifico(hash);
}
